//
//  SHPHomeTableViewController.swift
//  weibo
//
//  Created by songhuipan on 16/4/16.
//  Copyright © 2016年 songhuipan. All rights reserved.
//

import UIKit

let statusCell = "statusCell"

class SHPHomeTableViewController: SHPvisitorTableViewController {
    
    var statusArray:[SHPStatus] = [SHPStatus]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // 判断是否是登录状态，加载访客视图
        if !isLogIn {
            visitorView?.setVisitorInfo(nil, title: nil)
            return
        }
        // 设置tableView信息
        setupUI()
        setupTableViewInfo()
        // 请求微博数据
        loadMoreData(indicatorView.isAnimating())
    }
    // MARK:懒加载自定义刷新控件
    private lazy var refresh:SHPRefresh = SHPRefresh()
    // MARK:懒加载显示更新微博条数
    private lazy var showCountLabel:UILabel = {
        let lab = UILabel(textColor: UIColor.blackColor(), textFont: 14)
        lab.backgroundColor = ThemeColor
        lab.textAlignment = .Center
        lab.hidden = true
        return lab
    }()
    // MARK:懒加载footerView
    private lazy var indicatorView:UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicatorView.color = UIColor.redColor()
        indicatorView.sizeToFit()
        return indicatorView
    }()
}
// MARK:UITableViewDataSource,UITableViewDelegate
extension SHPHomeTableViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusArray.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(statusCell, forIndexPath: indexPath) as! SHPStatusCell
//        let view = UIView(frame: cell.frame)
//        view.backgroundColor = RandomColor()
//        cell.backgroundView = view
        cell.status = statusArray[indexPath.row]
        return cell
    }
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row == (statusArray.count)-1 && !indicatorView.isAnimating() {
            // 菊花旋转，开始加载更多数据
            indicatorView.startAnimating()
            loadMoreData(indicatorView.isAnimating())
        }
    }
}
extension SHPHomeTableViewController {
    // MARK:设置UI视图的方法
    func setupUI (){
        // 将显示更新微博条数的控件添加到导航栏下面
        navigationController?.view.insertSubview(showCountLabel, belowSubview: (navigationController?.navigationBar)!)
        showCountLabel.frame = CGRectMake(0, 64-34, kScreenWidth, 34)
        
    }
    // MARK:停止刷新的方法
    func endReshing () {
        // 菊花停止旋转
        indicatorView.stopAnimating()
        // 停止刷新
        refresh.endRefreshing()
    }
    // MARK:设置显示更新微博条数的控件动画
    func setShowCountLabelAnimation(count:Int){
        showCountLabel.hidden = false
        var countLabelTitle = ""
        if count == 0 {
            countLabelTitle = "您已经是最新微博"
        }else {
            countLabelTitle = "更新了\(count)条微博"
        }
        showCountLabel.text = countLabelTitle
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.showCountLabel.frame.origin.y = 64
            }) { (_) -> Void in
                
                UIView.animateWithDuration(1, delay: 1, options: [], animations: { () -> Void in
                    self.showCountLabel.frame.origin.y = 64-34
                    }, completion: { (_) -> Void in
                        self.showCountLabel.hidden = true
                })
        }
    }
    // MARK:设置tableView信息
    func setupTableViewInfo() {
        // 注册cell
        tableView.registerClass(SHPStatusCell.self, forCellReuseIdentifier: statusCell)
        // 自适应行高
        tableView.estimatedRowHeight = 300
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.tableFooterView = indicatorView
        tableView.separatorStyle = .None
        // 添加刷新控件
        tableView.addSubview(refresh)
        // 接收刷新控件内部传过来的通知
        refresh.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
        }
    // MARK:刷新控件下拉刷新时调用的方法，
    @objc private func refreshAction (){
        loadMoreData(indicatorView.isAnimating())
    }
    // MARK:上拉加载微博数据的方法
//    since_id	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
//    max_id 若指定此参数，则返回ID  小于或等于  max_id的微博，默认为0。
    func loadMoreData(isPullup:Bool){
        var sinceId: Int64 = 0
        var maxId: Int64 = 0
        // 每一条微博都对应着一个id,微博时间越新，id越大，时间越旧，id越小
        if isPullup {
            sinceId = 0
            maxId = statusArray.last?.id ?? 0
            if maxId > 0 {
                // 避免重复一条，所以减1
                maxId = maxId - 1
            }
        }else {
            sinceId = statusArray.first?.id ?? 0
            maxId = 0
        }
        SHPStatusDAL.getHomeStatus(sinceId, max_id: maxId) { (array) -> () in
            // 获得数据，停止刷新
            self.endReshing()
            if array.count == 0 {
                print("获取数据失败")
                return
            }
            // 定义一个临时数组存储数据
            var tempArray :[SHPStatus] = [SHPStatus]()
            for dic in array {
                let status = SHPStatus(dic: dic)
                tempArray.append(status)
            }
            // 下拉加载更多
            if isPullup {
                self.statusArray = self.statusArray + tempArray
            }else {// 上拉刷新
                self.statusArray = tempArray + self.statusArray
                // 显示更新了多少条微博
                if self.showCountLabel.hidden == true {
                    self.setShowCountLabelAnimation(tempArray.count)
                }
            }
            // 刷新数据源
            self.tableView.reloadData()

        }
//        loadData(sinceId, max_id: maxId, isPullup: isPullup)
    }
    // MARK:加载网络请求获得数据源的方法
    private func loadData (since_id:Int64,max_id:Int64,isPullup:Bool) {
        let urlString = "https://api.weibo.com/2/statuses/friends_timeline.json"
        let params = ["access_token":SHPUserAccountViewModel.sharedUserAccount.account!.access_token!,"max_id":"\(max_id)","since_id":"\(since_id)"]
        
        NetworkTools.sharedTools.loadData(httpMethod.GET, urlString: urlString, params: params) { (responseObject, error) -> () in
            // 获得数据，停止刷新
            self.endReshing()
            if error != nil {
                print(error)
                return
            }
            guard let array = responseObject?["statuses"] as? [[String:AnyObject]] else{
                
                print("返回的数据不是一个数组")
                return
            }
            // 定义一个临时数组存储数据
            var tempArray :[SHPStatus] = [SHPStatus]()
            for dic in array {
                let status = SHPStatus(dic: dic)
                tempArray.append(status)
            }
            // 下拉加载更多
            if isPullup {
                self.statusArray = self.statusArray + tempArray
            }else {// 上拉刷新
                self.statusArray = tempArray + self.statusArray
                // 显示更新了多少条微博
                if self.showCountLabel.hidden == true {
                    self.setShowCountLabelAnimation(tempArray.count)
                }
            }
            // 刷新数据源
            self.tableView.reloadData()
            
//            print(self.statusArray)
        }
    }
}

















